/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package comportement;

import InterfaceGraphique.BoiteMessage;
import InterfaceGraphique.exceptions.PopupException;
import cartes.Carte;
import cartes.Monstre;
import common.Constantes;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import plateau.Joueur;
import plateau.Partie;
import plateau.exceptions.DefausserClasseRaceException;

/**
 *
 * @author Arthur
 */
public class ActionChangeRaceClasse implements ActionCarte, Serializable {   
    
    // race ou classe
    private String type;
    private boolean pioche = true;
    
    public ActionChangeRaceClasse(String type) {
        this.type = type;
    }
    
    public ActionChangeRaceClasse(String type, boolean pioche) {
        this.type = type;
        this.pioche = pioche;
    }
    
    /*
     * Carte malédiction changement de race : si t'as une race tu la défausse et tu choppes la première de la pioche
     */
    public void utiliser(Joueur j) {
        Carte newRace;
        
        // Si race équipée
        if( (! j.getInventaire().getRace().isEmpty() && type.equals(Constantes.C_RACE) )
                || (! j.getInventaire().getClasse().isEmpty() && type.equals(Constantes.C_CLASSE)) ) {     
            // On enlève
            ArrayList<Carte> liste = (type.equals(Constantes.C_RACE)) ? j.getInventaire().getCartesRace() : j.getInventaire().getCartesClasse();
            for ( Carte c :  liste ) {
                try {
                    j.defausserInventaire(c);
                } catch (DefausserClasseRaceException ex) {
                    new BoiteMessage(ex.getMessage());
                    j.defausserInventaireForce(c);
                }
            }

            // On recherche dans la défausse
            if( pioche && (newRace = Partie.getDefausse().getFirst( type )) != null ) {
                // Et on équipe !
                j.getInventaire().add(newRace);
            }
        }
    }

    public String getDescription() {
       String description;
        description = "Vous perdez tout votre inventaire" ;
        return description;
    }

    public void utiliser(Joueur j, Joueur j2) {
        this.utiliser(j2);
    }

    public void utiliser(Monstre m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
